package com.xianyl.libsforandroid.flash;

import com.xianyl.libsforandroid.XConstent;
import com.xianyl.libsforandroid.utils.PreferencesUtils;

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;


/**
 * 启动动画的相关类,包括选择启动动画后是去引导页还是首页的逻辑
 * @author xianyl
 * @date 2015-3-3 下午8:28:21
 */
public class Flash implements AnimationListener{
	private Context mContext;	
	/**制作动画的相关监听**/
	private FlashListener mFlashListener;
	// 延迟2秒
	private static final long SPLASH_DELAY_MILLIS = 2000;
	
	/**
	 * 构造方法
	 * @param context 建议传入当前activity对象,如果实现FlashListener,也会设置进去 
	 */
	public Flash(Context context) {
		this.mContext = context;
		if(context instanceof FlashListener){
			this.mFlashListener = (FlashListener) context;
		}
	}
	
	/**
	 * 制作动画,该动画设置在ImageView的startAnimation方法,如果是要设置更多的属性,可以直接在activity中设置,此方法不用即可
	 * @param time 时长,例如1秒 1000
	 * @param fromAlpha 开始透明度  例如0.5f
	 * @param toAlpha 结束透明度  例如1.0f
	 * @return 动画对象 
	 */
	public AlphaAnimation makeAnimation(long time, float fromAlpha, float toAlpha) {
		AlphaAnimation alpha = new AlphaAnimation(fromAlpha, toAlpha);
		// 时长
		alpha.setDuration(time);
		// 动画结束状态
		alpha.setFillAfter(true);
		// 获取动画结束触发信号
		alpha.setAnimationListener(this);
		
		return alpha;
	}

	
	@Override
	/**监听动画的开始,这里没有做任何实现,具体可以实现 FlashListener**/
	public void onAnimationStart(Animation animation) {
		if(mFlashListener != null)
			mFlashListener.onAnimationStart(animation);
	}

	@Override
	/**监听动画的结束,这里已经实现选择去首页还是去引导页的逻辑,如需其它可以实现 FlashListener**/
	public void onAnimationEnd(Animation animation) {
		if(mFlashListener != null)
			mFlashListener.onAnimationEnd(animation);
		// 取得是否第一次进入app的标识值，如果没有该值，说明还未写入，用true作为默认值
		if (PreferencesUtils.getBoolean(mContext, XConstent.KEY_GUIDE_SWITCH, true)) {
			//如果是第一进入，则显示引导页
			mHandler.sendEmptyMessageDelayed(XConstent.GO_GUIDE, SPLASH_DELAY_MILLIS);
		} else {
			// 使用Handler的postDelayed方法，2秒后执行跳转到MainActivity
			mHandler.sendEmptyMessageDelayed(XConstent.GO_HOME, SPLASH_DELAY_MILLIS);
		}
	}

	@Override
	/**监听动画重复,这里没有做任何实现,具体可以实现 FlashListener**/
	public void onAnimationRepeat(Animation animation) {
		if(mFlashListener != null)
			mFlashListener.onAnimationRepeat(animation);
	}
	
	
	@SuppressLint("HandlerLeak")
	/**Handler:跳转到不同界面**/
	private Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			if(mFlashListener == null){
				Log.e("Flash", "请实现FlashListener");
				return;
			}
			switch (msg.what) {
			case XConstent.GO_HOME:
				mFlashListener.goHome();
				break;
			case XConstent.GO_GUIDE:
				mFlashListener.goGuide();
				break;
			}
		}
	};
	
	
	
	
	
}
